#include "VectorClauseDatabase.h"
#include "helper.h"

using namespace std;

VectorClauseDatabase::~VectorClauseDatabase()
{
    if (local_clauses)
        delete clauses;
}

VectorClauseDatabase::VectorClauseDatabase(PBConfig config)
    : ClauseDatabase(config)
    , local_clauses(true)
    , clauses(new vector<vector<int32_t>>())
{
}

VectorClauseDatabase::VectorClauseDatabase(PBConfig config, vector<vector<int32_t>>* clauses)
    : ClauseDatabase(config)
    , local_clauses(false)
    , clauses(clauses)
{
}

void VectorClauseDatabase::clearDatabase()
{
    assert(local_clauses);
    clauses->clear();
    resetInternalUnsatState();
}

void VectorClauseDatabase::resetInternalUnsatState()
{
    deleteIsSetToUnsatFlag();
}

void VectorClauseDatabase::addClauseIntern(const vector<int32_t>& clause)
{
    clauses->push_back(clause);
}

vector<vector<int32_t>> const& VectorClauseDatabase::getClauses()
{
    return *clauses;
}

void VectorClauseDatabase::printFormula(ostream& out)
{
    for (auto const& clause : *clauses) {
        print_vector(out, clause);
        out << " 0\n";
    }
}
